let score = 0;
window.onload=function(){
    newgame()
}

function newgame(){

   score = 0;
    init();
    //生成两个随机位置的随机数字
    getonenumber();
    getonenumber();
    updateScore();
    
}

function clearboxnumber(){
   
      //开始新的游戏时判断是否存在数字格子，存在删掉
      let node = document.getElementById('boxs');
      let box = document.getElementsByClassName('box');
     
    
     if (document.getElementsByClassName('box-number')) {
         let removenumnode = document.getElementsByClassName('box-number');
        
      
     let childs = removenumnode;
     for(let i = childs .length - 1; i >= 0; i--) {
       
        node.removeChild(childs[i].parentNode);
       
      }
      for(let k = 0;k<box.length;k++){
        box[k].style.backgroundColor='sandybrown';
     }
     }
}
//开始游戏
function demo(){
    clearboxnumber();
      newgame();
      gametime();
    　　
 }
 //重新游戏
 function palyagain(){
     demo();
    
 }
 //更新分数
function updateScore() {
    var scoreNode = document.getElementById('score');
    scoreNode.innerText = score;
}

//gameover
function gameover(){
    let gameover = document.getElementById('gameover');
    gameover.className = 'gameover'
}
//游戏结束得分
function gameoverscore(){
    var scoreNode = document.getElementById('scoreover');
    scoreNode.innerText = score;
}

function gametime(){
    let gameover = document.getElementById('gameover');
    gameover.className = 'gameover gameovernone'
}
//判断游戏是否结束
function isgameover(){
    if(emply(arr) && nomove(arr)){
        gameover();
        gameoverscore();
    }
}


let arr = new Array();
//初始化棋盘格
function init(){
    //行
    for(let i = 0;i<4;i++){
         arr[i]=new Array()
     //列
        for(let j = 0;j<4;j++){
          //每个格子初始化为0
            arr[i][j] = 0;
            //获取每一个格子
            let box = document.getElementById("box-"+i+"-"+j);
            //设置距离
            box.style.top=getTopPos(i,j)+'px';
            box.style.left=getLeftPos(i,j)+'px';
       
        }
    }
    updatedbox();
}
//初始化数字
function updatedbox() {
   //  document.getElementById(".box-number").remove();
    for(let i = 0;i<4;i++){
        for(let j = 0;j<4;j++){

            //创建数字格
         let boxnumber = document.createElement('div');
         boxnumber.innerHTML="<div class='box-number' id='box-number-"+i+"-"+j+"'></div>"
          let box = document.getElementById('boxs')
          box.appendChild(boxnumber)

          let numberbox = document.getElementById('box-number-'+i+'-'+j)
          
          if(arr[i][j] ==0){
            numberbox.style.width = '0px';
            numberbox.style.height = '0px';
           
          
            numberbox.style.left = (getLeftPos(i,j)+40+'px');
            numberbox.style.top = (getTopPos(i,j)+20+'px');
          }else{
            
          }


        }
    }
    
}
//生成一个随机位置的随机数字
function getonenumber(){

//生成一个随机位置
//生成x坐标
let randx = parseInt(Math.floor(Math.random()*4));

//生成y坐标
let randy = parseInt(Math.floor(Math.random()*4));


//定义死循环
while(true){

    if(arr[randx][randy] == 0){
        
        break;
     
    }else{

    //重新生成x坐标
     randx = parseInt(Math.floor(Math.random()*4));
   
    //重新生成y坐标
     randy = parseInt(Math.floor(Math.random()*4));
}
   
}



//生成一个随机数字2 / 4
let randNumber = Math.random()<0.5?2:4;

//随机位置上显示随机数字

arr[randx][randy] = randNumber;

console.log(arr[randx][randy])
//实现随机数字显示的动画
ShowNumberAnimation(randx,randy,randNumber);

}

//判断是否可以移动
function moveLeft(){
    if(!canMoveLeft(arr)){
        return false;
    }
    for(let i = 0;i<4;i++){
        //第一列不可以移动
        for(let j = 1;j<4;j++){
            //当前数字格有值
            if(arr[i][j]!=0){
                //移动
                for(let k = 0;k<j;k++){
                    if(arr[i][k]==0 && nonumber(i,k,j,arr)){
                        //移动
                        // showMovenumber(i,j,i,k);
                      
                        arr[i][k]=arr[i][j];
                     
                        arr[i][j]=0;
                        // console.log(arr[i][k])
                        showMovenumber(i,k,j,arr[i][k],arr[i][j]);
                       
                       // arr[i][j]=0;
                        
                    
                        
                    }else if(arr[i][k] == arr[i][j] && nonumber(i,k,j,arr)){
                        //移动
                      
                        arr[i][k]=arr[i][j]*2;
                        score = score+1;
                        arr[i][j]=0;
                        showMovenumber(i,k,j,arr[i][k],arr[i][j]);
                    }
                }
            }
        }
    }
    updateScore();
    getonenumber();
  
}
//判断是否可以移动
function moveRight(){
    if(!canMoveRight(arr)){
        return false;
    }
    for(let i = 0;i<4;i++){
        //第最后一列不可以移动
        for(let j = 2;j>-1;j--){
            //当前数字格有值
            if(arr[i][j]!=0){
                //移动
                for(let k = 3;k>j;k--){
                    if(arr[i][k]==0 && nonumber(i,k,j,arr)){
                        //移动
                        // showMovenumber(i,j,i,k);
                      
                        arr[i][k]=arr[i][j];
                        arr[i][j]=0;
                        // console.log(arr[i][k])
                        showMovenumber(i,k,j,arr[i][k],arr[i][j]);
                       
                       // arr[i][j]=0;
                        
                    
                        
                    }else if(arr[i][k] == arr[i][j] && nonumber(i,k,j,arr)){
                        //移动
                      
                        arr[i][k]=arr[i][j]*2;
                        score = score+1;
                        arr[i][j]=0;
                        showMovenumber(i,k,j,arr[i][k],arr[i][j]);
                    }
                }
            }
        }
    }
    updateScore();
    getonenumber();
  
}

//判断是否可以移动
function moveTop(){
    if(!canMoveTop(arr)){
        return false;
    }
    for(let j = 0;j<4;j++){
        //第一行不可以移动
        for(let i = 1;i<4;i++){
            //当前数字格有值
            if(arr[i][j]!=0){
                //移动
                for(let k = 0;k<i;k++){
                    if(arr[k][j]==0 && nonumberTop(i,k,j,arr)){
                        //移动
                        // showMovenumber(i,j,i,k);
                      
                        arr[k][j]=arr[i][j];
                        arr[i][j]=0;
                        // console.log(arr[i][k])
                        showMovenumberTop(i,k,j,arr[k][j],arr[i][j]);
                       
                       // arr[i][j]=0;
                        
                    
                        
                    }else if(arr[k][j] == arr[i][j] && nonumberTop(i,k,j,arr)){
                        //移动
                      
                        arr[k][j]=arr[i][j]*2;
                        score = score+1;
                        arr[i][j]=0;
                        showMovenumberTop(i,k,j,arr[k][j],arr[i][j]);
                    }
                }
            }
        }
    }
    updateScore();
    getonenumber();
  
}

//判断是否可以移动
function moveBotton(){
    if(!canMoveBotton(arr)){
        return false;
    }
    for(let j = 0;j<4;j++){
        //最后一行不可以移动
        for(let i = 2;i>-1;i--){
            //当前数字格有值
            if(arr[i][j]!=0){
                //移动
                for(let k = 3;k>i;k--){
                    if(arr[k][j]==0 && nonumberTop(i,k,j,arr)){
                        //移动
                      
                        arr[k][j]=arr[i][j];
                        
                        arr[i][j]=0;
                        
                        // console.log(arr[i][k])
                        showMovenumberTop(i,k,j,arr[k][j],arr[i][j]);
                       
                       // arr[i][j]=0;
                        
                    
                        
                    }else if(arr[k][j] == arr[i][j] && nonumberTop(i,k,j,arr)){
                        //移动
                      
                        arr[k][j]=arr[i][j]*2;
                        score = score+1;
                        arr[i][j]=0;
                        showMovenumberTop(i,k,j,arr[k][j],arr[i][j]);
                    }
                }
            }
        }
    }
    updateScore();
    getonenumber();
  
}